<template>
  <!-- 用户管理 -->
  <div class="RoleUserList">
    <a-row :gutter="10">
      <a-col :md="leftColMd" :sm="24" style="margin-bottom: 20px">
        <a-row class="aRow-wrapper" :gutter="12">
          <a-col class="listContent-wrapper" :span="24">
            <div class="l-w_content">
              <top-title :updateTime="false" :content="content"></top-title>
              <div class="l-w_c_content">
                <div class="pageInfo">
                  <!-- 查询区域 -->
                  <div class="searchContent searchContent_item">
                    <!-- 搜索区域 -->
                    <a-form layout="inline" @keyup.enter.native="searchQuery">
                      <a-row :gutter="24">
                        <a-col :span="4">
                          <a-form-item label="角色名称">
                            <j-input
                              :maxLength="30"
                              placeholder="请输入角色名称"
                              v-model="queryParam.roleName"
                            ></j-input>
                          </a-form-item>
                        </a-col>
                        <a-col :span="4">
                          <a-button
                            type="primary"
                            class="BtnStyle"
                            @click="searchQuery"
                            icon="search"
                            style="margin-left: 21px"
                          >
                            搜索
                          </a-button>
                          <a-button
                            type="primary"
                            class="BtnStyle"
                            @click="searchReset"
                            icon="reload"
                            style="margin-left: 8px"
                          >
                            重置
                          </a-button>
                        </a-col>
                      </a-row>
                    </a-form>
                  </div>
                  <!-- 操作按钮区域 -->
                  <div class="table-operator" style="margin: 5px 0 10px 2px">
                    <a-button @click="handleAdd" type="primary" class="BtnStyle" icon="plus">添加角色</a-button>
                  </div>
                  <div class="ant-alert ant-alert-info" style="margin-bottom: 16px">
                    <i class="anticon anticon-info-circle ant-alert-icon"> </i> 已选择
                    <a>
                      <b>{{ selectedRowKeys1.length }}</b>
                    </a>
                    项
                    <a style="margin-left: 24px" @click="onClearSelected1">清空</a>
                  </div>
                  <div style="margin-top: 15px">
                    <a-table
                      style="height: 500px"
                      ref="table"
                      size="middle"
                      class="tableList"
                      bordered
                      rowKey="id"
                      :columns="columns"
                      :dataSource="dataSource"
                      :pagination="ipagination"
                      :loading="loading"
                      :rowSelection="{ selectedRowKeys: selectedRowKeys1, onChange: onSelectChange1, type: 'radio' }"
                      @change="handleTableChange"
                    >
                      <span slot="action" slot-scope="text, record">
                        <a class="operation" @click="handleOpen(record)">用户</a>
                        <a-divider type="vertical" />
                        <a-dropdown>
                          <a class="ant-dropdown-link operation"> 更多 <a-icon type="down" /> </a>
                          <a-menu slot="overlay">
                            <a-menu-item>
                              <a @click="handlePerssion(record.id)">授权</a>
                            </a-menu-item>
                            <a-menu-item>
                              <a @click="handleEdit(record)">编辑</a>
                            </a-menu-item>
                            <a-menu-item>
                              <a-popconfirm title="确定删除吗?" @click="showDelete(records)">
                                <a>删除</a>
                              </a-popconfirm>
                            </a-menu-item>
                          </a-menu>
                        </a-dropdown>
                      </span>
                    </a-table>
                  </div>
                  <!-- 右侧的角色权限配置 -->
                  <user-role-modal ref="modalUserRole"></user-role-modal>
                  <role-modal ref="modalForm" @refresh="searchQuery"></role-modal>
                </div>
              </div>
            </div>
          </a-col>
        </a-row>
      </a-col>
      <a-col :md="rightColMd" :sm="24" v-if="this.rightcolval == 1">
        <a-row class="aRow-wrapper" :gutter="12">
          <a-col class="listContent-wrapper" :span="24">
            <div class="l-w_content">
              <top-title :updateTime="false" :content="content1"></top-title>
              <div class="l-w_c_content">
                <div class="pageInfo">
                  <div style="text-align: right; color: #188aff">
                    <a-icon type="close-circle" @click="hideUserList" />
                  </div>
                  <!-- 查询区域 -->
                  <div class="searchContent searchContent_item">
                    <a-form layout="inline">
                      <a-row :gutter="24">
                        <a-col :md="12" :sm="12">
                          <a-form-item label="用户账号">
                            <a-input :maxLength="30" placeholder="" v-model="queryParam2.username"></a-input>
                          </a-form-item>
                        </a-col>
                        <a-col :md="12">
                          <a-button
                            type="primary"
                            class="searchBtn"
                            @click="searchQuery2"
                            icon="search"
                            style="margin-left: 21px"
                          >
                            查询
                          </a-button>
                          <a-button
                            type="primary"
                            class="resetBtn"
                            @click="searchReset2"
                            icon="reload"
                            style="margin-left: 8px"
                          >
                            重置
                          </a-button>
                        </a-col>
                      </a-row>
                    </a-form>
                  </div>
                  <!-- 操作按钮区域 -->
                  <div class="table-operator" style="margin-bottom: 10px" :md="24">
                    <a-button @click="handleAdd2" class="BtnStyle" type="primary" icon="plus" style="margin-top: 16px">
                      新增用户
                    </a-button>
                    <a-button
                      @click="handleAddUserRole"
                      class="BtnStyle"
                      type="primary"
                      icon="plus"
                      style="margin-top: 16px"
                    >
                      已有用户
                    </a-button>
                    <a-dropdown v-if="selectedRowKeys2.length > 0">
                      <a-menu slot="overlay">
                        <a-menu-item key="1" @click="batchDel2">
                          <a-icon type="delete" />
                          删除
                        </a-menu-item>
                      </a-menu>
                      <a-button class="BtnStyle" style="margin-left: 8px">
                        批量操作
                        <a-icon type="down" />
                      </a-button>
                    </a-dropdown>
                  </div>
                  <!-- table区域-begin -->
                  <div>
                    <div class="ant-alert ant-alert-info" style="margin-bottom: 16px">
                      <i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择
                      <a style="font-weight: 600">{{ selectedRowKeys2.length }} </a>
                      项
                      <a style="margin-left: 24px" @click="onClearSelected2">清空</a>
                    </div>
                    <a-table
                      style="height: 500px"
                      ref="table2"
                      bordered
                      size="middle"
                      rowKey="id"
                      class="tableList"
                      :columns="columns2"
                      :dataSource="dataSource2"
                      :pagination="ipagination2"
                      :loading="loading2"
                      :rowSelection="{ selectedRowKeys: selectedRowKeys2, onChange: onSelectChange2 }"
                      @change="handleTableChange2"
                    >
                      <span slot="action" slot-scope="text, record">
                        <a class="operation" @click="handleEdit2(record)">编辑</a>
                        <a-divider type="vertical" />
                        <a-dropdown>
                          <a class="ant-dropdown-link operation"> 更多 <a-icon type="down" /> </a>
                          <a-menu slot="overlay">
                            <a-menu-item>
                              <a-popconfirm title="确定删除吗?" @confirm="() => handleDelete2(record.id)">
                                <a>删除</a>
                              </a-popconfirm>
                            </a-menu-item>
                          </a-menu>
                        </a-dropdown>
                      </span>
                    </a-table>
                  </div>
                  <!-- 表单区域 -->
                  <role-modal ref="modalForm" @refresh="searchQuery"></role-modal>
                  <user-modal ref="modalForm2" @refresh="modalFormOk2"></user-modal>
                  <Select-User-Modal ref="selectUserModal" @selectFinished="selectOK"></Select-User-Modal>
                </div>
              </div>
            </div>
          </a-col>
        </a-row>
      </a-col>
    </a-row>
  </div>
</template>
<script>
import { JeecgListMixin } from '@/mixins/JeecgListMixin'
import { deleteAction, postAction, getAction } from '@/api/manage'
import SelectUserModal from './modules/SelectUserModal'
import RoleModal from './modules/RoleModal'
// import UserModal from './modules/UserModal'  // TODO
import { filterObj } from '@/utils/util'
import UserRoleModal from './modules/UserRoleModal'
import moment from 'moment'
import topTitle from '@/components/topTitle'
import JInput from '@/components/jeecg/JInput'
export default {
  name: 'RoleUserList',
  mixins: [JeecgListMixin],
  components: {
    UserRoleModal,
    SelectUserModal,
    RoleModal,
    // UserModal,
    moment,
    JInput,
    topTitle,
  },
  data () {
    return {
      content: [['角色管理']],
      model1: {},
      model2: {},
      currentRoleId: '',
      queryParam1: {},
      queryParam2: {},
      dataSource1: [],
      dataSource2: [],
      ipagination1: {
        current: 1,
        pageSize: 10,
        pageSizeOptions: ['10', '20', '30'],
        showTotal: (total, range) => {
          return range[0] + '-' + range[1] + ' 共' + total + '条'
        },
        showQuickJumper: true,
        showSizeChanger: true,
        total: 0,
      },
      ipagination2: {
        current: 1,
        pageSize: 10,
        showTotal: (total, range) => {
          return range[0] + '-' + range[1] + ' 共' + total + '条'
        },
        showQuickJumper: true,
        hideOnSinglePage: true,
        total: 0,
      },
      isorter1: {
        column: 'createTime',
        order: 'desc',
      },
      isorter2: {
        column: 'createTime',
        order: 'desc',
      },
      filters1: {},
      filters2: {},
      loading1: false,
      loading2: false,
      selectedRowKeys1: [],
      selectedRowKeys2: [],
      selectionRows1: [],
      selectionRows2: [],
      test: {},
      rightcolval: 0,
      columns: [
        {
          title: '角色编码',
          align: 'center',
          ellipsis: true,
          dataIndex: 'roleCode',
        },
        {
          title: '角色名称',
          align: 'center',
          ellipsis: true,
          dataIndex: 'roleName',
        },
        {
          title: '创建时间',
          dataIndex: 'createTime',
          ellipsis: true,
          align: 'center',
          sorter: true,
          // customRender: (text) => {
          //   return moment(text).format('YYYY/MM/DD')
          // },
        },
        {
          title: '操作',
          dataIndex: 'action',
          align: 'center',
          ellipsis: true,
          scopedSlots: { customRender: 'action' },
        },
      ],
      columns2: [
        {
          title: '用户账号',
          align: 'center',
          ellipsis: true,
          dataIndex: 'username',
          width: 120,
        },
        {
          title: '用户名称',
          align: 'center',
          ellipsis: true,
          width: 100,
          dataIndex: 'realname',
        },
        {
          title: '状态',
          align: 'center',
          ellipsis: true,
          width: 80,
          dataIndex: 'status_dictText',
        },

        {
          title: '操作',
          dataIndex: 'action',
          scopedSlots: { customRender: 'action' },
          align: 'center',
          width: 120,
        },
      ],

      // 高级查询参数
      superQueryParams2: '',
      // 高级查询拼接条件
      superQueryMatchType2: 'and',
      url: {
        list: '/sys/role/page',
        delete: '/sys/role/delete',
        list2: '/sys/user/userRoleList',
        addUserRole: '/sys/user/addSysUserRole',
        delete2: '/sys/user/deleteUserRole',
        deleteBatch2: '/sys/user/deleteUserRoleBatch',
        exportXlsUrl: 'sys/role/exportXls',
        importExcelUrl: 'sys/role/importExcel',
      },
    }
  },
  computed: {
    importExcelUrl: function () {
      return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`
    },
    leftColMd () {
      return this.selectedRowKeys1.length === 0 ? 24 : 12
    },
    rightColMd () {
      return this.selectedRowKeys1.length === 0 ? 0 : 12
    },
  },
  methods: {
    onSelectChange2 (selectedRowKeys, selectionRows) {
      this.selectedRowKeys2 = selectedRowKeys
      this.selectionRows2 = selectionRows
    },
    onClearSelected2 () {
      this.selectedRowKeys2 = []
      this.selectionRows2 = []
    },
    onClearSelected1 () {
      this.selectedRowKeys1 = []
      this.selectionRows1 = []
    },
    onSelectChange1 (selectedRowKeys, selectionRows) {
      this.rightcolval = 1
      this.selectedRowKeys1 = selectedRowKeys
      this.selectionRows1 = selectionRows
      this.model1 = Object.assign({}, selectionRows[0])
      console.log(this.model1)
      this.currentRoleId = selectedRowKeys[0]
      this.loadData2()
    },
    onClearSelected () { },

    getQueryParams2 () {
      //获取查询条件
      let sqp = {}
      if (this.superQueryParams2) {
        sqp['superQueryParams'] = encodeURI(this.superQueryParams2)
        sqp['superQueryMatchType'] = this.superQueryMatchType2
      }
      var param = Object.assign(sqp, this.queryParam2, this.isorter2, this.filters2)
      param.field = this.getQueryField2()
      param.pageNo = this.ipagination2.current
      param.pageSize = this.ipagination2.pageSize
      return filterObj(param)
    },
    getQueryField2 () {
      var str = 'id,'
      this.columns2.forEach(function (value) {
        str += ',' + value.dataIndex
      })
      return str
    },
    handleEdit2: function (record) {
      this.$refs.modalForm2.title = '编辑'
      this.$refs.modalForm2.roleDisabled = true
      this.$refs.modalForm2.edit(record)
    },
    handleAdd2: function () {
      if (this.currentRoleId == '') {
        this.$message.error('请选择一个角色!')
      } else {
        this.$refs.modalForm2.roleDisabled = true
        this.$refs.modalForm2.title = '新增'
        this.$refs.modalForm2.edit({ activitiSync: '1', userIdentity: 1, selectedroles: this.currentRoleId })
      }
    },
    modalFormOk2 () {
      // 新增/修改 成功时，重载列表
      this.loadData2()
    },
    loadData2 (arg) {
      if (!this.url.list2) {
        this.$message.error('请设置url.list2属性!')
        return
      }
      //加载数据 若传入参数1则加载第一页的内容
      if (arg === 1) {
        this.ipagination2.current = 1
      }
      if (this.currentRoleId === '') return
      let params = this.getQueryParams2() //查询条件
      params.roleId = this.currentRoleId
      this.loading2 = true
      getAction(this.url.list2, params).then((res) => {
        if (res.success) {
          this.dataSource2 = res.result.records
          this.ipagination2.total = res.result.total
        }
        this.loading2 = false
      })
    },
    handleDelete1: function (id) {
      this.handleDelete(id)
      this.dataSource2 = []
      this.currentRoleId = ''
    },
    handleDelete2: function (id) {
      if (!this.url.delete2) {
        this.$message.error('请设置url.delete2属性!')
        return
      }
      var that = this
      deleteAction(that.url.delete2, { roleId: this.currentRoleId, userId: id }).then((res) => {
        if (res.success) {
          that.$message.success(res.message)
          that.loadData2()
        } else {
          that.$message.warning(res.message)
        }
      })
    },
    batchDel2: function () {
      if (!this.url.deleteBatch2) {
        this.$message.error('请设置url.deleteBatch2属性!')
        return
      }
      if (this.selectedRowKeys2.length <= 0) {
        this.$message.warning('请选择一条记录！')
        return
      } else {
        var ids = ''
        for (var a = 0; a < this.selectedRowKeys2.length; a++) {
          ids += this.selectedRowKeys2[a] + ','
        }
        var that = this
        console.log(this.currentDeptId)
        this.$confirm({
          title: '确认删除',
          content: '是否删除选中数据?',
          onOk: function () {
            deleteAction(that.url.deleteBatch2, { roleId: that.currentRoleId, userIds: ids }).then((res) => {
              if (res.success) {
                that.$message.success(res.message)
                that.loadData2()
                that.onClearSelected()
              } else {
                that.$message.warning(res.message)
              }
            })
          },
        })
      }
    },
    selectOK (data) {
      let params = {}
      params.roleId = this.currentRoleId
      params.userIdList = []
      for (var a = 0; a < data.length; a++) {
        params.userIdList.push(data[a])
      }
      console.log(params)
      postAction(this.url.addUserRole, params).then((res) => {
        if (res.success) {
          this.loadData2()
          this.$message.success(res.message)
        } else {
          this.$message.warning(res.message)
        }
      })
    },

    handleAddUserRole () {
      if (this.currentRoleId == '') {
        this.$message.error('请选择一个角色!')
      } else {
        this.$refs.selectUserModal.publicVisible = true
      }
    },
    handleOpen (record) {
      this.rightcolval = 1
      this.selectedRowKeys1 = [record.id]
      this.model1 = Object.assign({}, record)
      this.currentRoleId = record.id
      this.onClearSelected2()
      this.loadData2()
    },
    /*handleEdit: function(record) {
        if (this.currentRoleId == '') {
          this.$message.error('请选择一个角色!')
        } else {
          this.$refs.modalForm.edit(record)
          this.$refs.modalForm.title = '编辑'
        }
      },*/
    searchQuery2 () {
      console.log(this.queryParam2, 'this.queryParam2')
      this.loadData2(1)
    },
    searchReset2 () {
      this.queryParam2 = {}
      this.loadData2(1)
    },
    handleTableChange2 (pagination, filters, sorter) {
      //分页、排序、筛选变化时触发
      if (Object.keys(sorter).length > 0) {
        this.isorter2.column = sorter.field
        this.isorter2.order = 'ascend' == sorter.order ? 'asc' : 'desc'
      }
      this.ipagination2 = pagination
      this.loadData2()
    },
    hideUserList () {
      //this.rightcolval = 0
      this.selectedRowKeys1 = []
    },
    handlePerssion (roleId) {
      this.$refs.modalUserRole.show(roleId)
    },
  },
}
</script>
<style lang="less">
/** Button按钮间距 */
.ant-btn {
  margin-left: 8px;
}

.RoleUserList {
  width: 100%;
  height: 100%;
  background: #0b3761;
  .ant-row {
    height: 100%;
    .ant-col {
      height: 100%;
    }
  }
  .aRow-wrapper {
    padding: 0;
  }
  .pageInfo {
    width: 100%;
    height: 100%;
  }
  .listContent-wrapper .l-w_content {
    margin-right: 16px;
  }
}
</style>
